﻿using System;
using System.Windows.Forms;

namespace Tautologie
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void enterExpression_Click(object sender, EventArgs e)
        {
            try
            {
                TruthTable table = new TruthTable((int)Sentences.Value);
                Tree tree = new Tree(table, Input.Text);
                TruthTable.Lines = table.ToString().Split('\n');
                SetItemNo(table.ReturnLabels());

                int[] TautologyIndexes = table.CheckIfTautology();
                if (TautologyIndexes.Length != 0)
                {
                    if (TautologyIndexes.Length == 1)
                    {
                        label4.Text = "Wyrażenie " + (TautologyIndexes[0] + 1) + " jest tautologią.";
                    }
                    else
                    {
                        string s = "";
                        foreach (var item in table.CheckIfTautology())
                        {
                            s += (item + 1) + ", ";
                        }
                        s = s.Remove(s.Length - 2);
                        label4.Text = "Wyrażenia: " + s + " są tautologiami.";
                    }
                }
            }
            catch (EmptyExpressionException exception)
            {
                MessageBox.Show(exception.Message);
            }
            catch (InvalidExpressionException exception)
            {
                MessageBox.Show(exception.Message);
            }
            catch (TooLowOperandsException exception)
            {
                MessageBox.Show(exception.Message);
            }
            catch (NullReferenceException)
            {
                MessageBox.Show("Błędne wyrażenie. Wprowadzono zbyt dużą liczbę operandów.");
            }
        }

        private void SetItemNo(string[] labels)
        {
            int length = labels.Length;
            for (int i = 0; i < length; i++)
            {
                labels[i] = string.Concat((i + 1) + ". ", labels[i]);
            }
            ExpressionBox.Lines = labels;
            string label = "";
            for (int i = 0; i < length; i++)
            {
                label += ((i + 1) + " ");
            }
            Labels.Text = label;
        }

        private void HelpToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Program tworzy matrycę logiczną w oparciu o " +
                "podane wyrażenie w notacji beznawiasowej (Łukasiewicza) oraz podaje, czy jest ono taulogią. \n "
                + "N – negacja\n C – implikacja\n A – alternatywa\n K – koniunkcja\n"
                + "\nNależy upewnić się, że wybrano odpowiednią liczbę zdań p, q, r z rozwijanej listy.", 
                "Pomoc", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void ExitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void AboutToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("2016 Kamil Wasilewski\n\n"+
                "Program napisany w języku C# z wykorzystaniem biblioteki .NET Framework 4.5\n" + 
                "Program icon made by Freepik from www.flaticon.com ", "O programie", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}
